/*********************************************************************************************//**
* \file gsm.h
* \author Daneluzzi F., Pelloux-Prayer J., Battandier P.
* \version 1
* \date janvier 2012
* \brief Bibliothèque contenant les fonctions utilisées pour la gestion du module GSM.
* \defgroup gsm_group Module GSM
* @{
*************************************************************************************************/
#ifndef _module_gsm_h_
#define _module_gsm_h_

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lienSerieMC.h"

/** \def NO_PARAMETER
  * \brief Pas de paramètre (commande AT finie par un '?')
*/
#define NO_PARAMETER 0
/** \def NO_PARAMETER_AND_NO_EQUAL
  * \brief Pas de paramètre (commande AT seule : pas de '?' ni de '=')
*/
#define NO_PARAMETER_AND_NO_EQUAL -1
/** \def SIZE_CCLK_PARAM
  * \brief Taille des paramètres de la commande CCLK
*/
#define SIZE_CCLK_PARAM 17
/** \def SIZE_AT_RSSI
  * \brief Taille des paramètres de la commande CMGD
*/
#define SIZE_CMGD_PARAM 3
/** \def SIZE_AT_RSSI
  * \brief Taille de l'offset de la réponse à la commande CSQ
*/
#define OFFSET_CSQ 5
/** \def TIMEOUT_GSM_RC
  * \brief Timeout pour la réception pour le module GSM de 1 seconde
*/
#define TIMEOUT_GSM_RC 1000


/** \def CR
  * \brief Valeur hexadécimale du retour chariot
*/
#define CR 0x0D
/** \def MAX_TAILLE_SMS
  * \brief Taille maximale d'un SMS
*/
#define MAX_TAILLE_SMS 160
/** \def SIZE_AT_DATE
  * \brief Taille des paramètres de la commande CMGD
*/
#define SIZE_AT_DATE 25
/** \def SIZE_AT_RSSI
  * \brief Taille des paramètres de la commande CMGD
*/
#define SIZE_AT_RSSI 20
/** \def SIZE_AT_RSSI
  * \brief Valeur hexadécimale du retour <CONTROL-Z>
  */
#define VALIDATION_CMD_SMS 0x1A

/*************************************************************************************************//**
* \fn init_GSM
*
* \brief
* Initialisation du module GSM (enlève le mode echo)
*****************************************************************************************************/
void init_GSM(void);

/*************************************************************************************************//**
* \fn emettreCommandeAT
*
* \brief
* Emission d'une commande AT
*
* PARAMETRES :
* \param [in] AT_Cmd     : Commande AT à envoyer
* \param [in] Param_Size : Taille du paramètre de la commande
* \param [in] AT_Param   : Paramètres supplémentaires tel que le destinataire pour SendSMS
****************************************************************************************************/
void emettreCommandeAT(char *AT_Cmd, char Param_Size, char *AT_Param);

/*************************************************************************************************//**
* \fn sendSMS
*
* \brief
* Fonction d'envoi de SMS
*
* PARAMETRES :
* \param [in] dest     : Destinataire du message
* \param [in] data     : Contenu du SMS
* \param [in] sizeData : Taille du SMS
****************************************************************************************************/
void sendSMS(char * dest, char * data, int sizeData);

/*************************************************************************************************//**
* \fn getTime
*
* \brief
* Récupération de la date du module GSM
*
* PARAMETRES :
* \param [out] date_gsm : Date du module GSM
****************************************************************************************************/
void getTime(char *date_gsm);

/*************************************************************************************************//**
* \fn get_GSM_RESEAU
*
* \brief
* Réception du niveau du réseau
* Valeur de retour : de 0 (= mediocre) à 31 (= excellent) ou 99 (= pas de reseau)
*
* PARAMETRES :
* \return Qualité du réseau GSM
****************************************************************************************************/
int get_GSM_RESEAU(void);

/*************************************************************************************************//**
* \fn setTime
*
* \brief
* réglage de l'heure du module GSM
*
* PARAMETRES :
* \param [in] strDate : Date à mettre dans le module GSM
****************************************************************************************************/
void setTime(char * strDate);

/*************************************************************************************************//**
* \fn removeAllSMS
*
* \brief
* Efface tous les SMS
****************************************************************************************************/
void removeAllSMS(void);

/** @}*/
#endif
